Data Clump (DCL)

Description:

DCL detects classes that contain several independent groups of fields and methods. Such a class may be divided into several smaller classes each performing their own task. Smaller classes with well-defined sets of responsibilities are easier to understand and modify.

Incorrect:

class DataContainer {
    private ArrayList apples = new ArrayList();
    
    void addApple(IApple apple) {
        apples.Add(apple);
    }
    
    int getNumApples() {
        return apples.Count;
    }

    private ArrayList oranges = new ArrayList();
    
    void addOrange(IOrange orange) {
        oranges.Add(orange);
    }
    
    int getNumOranges() {
        return oranges.Count;
    }
}

Correct:

class AppleContainer {
    private ArrayList apples = new ArrayList();
    
    void addApple(IApple apple) {
        apples.Add(apple);
    }
    
    int getNumApples() {
        return apples.Count;
    }
}

class OrangeContainer {
    private ArrayList oranges = new ArrayList();
    
    void addOrange(IOrange orange) {
        oranges.Add(orange);
    }
    
    int getNumOranges() {
        return oranges.Count;
    }
}

Refactoring: